package com.rj.util;

import org.apache.commons.codec.Charsets;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;

/**
 * 字符节出来工具
 *
 * @author ranlubo
 * @date 2019年10月15日 下午4:50:04
 * @Copyright 2019 www.gz.aisino.com Inc. All rights reserved.
 */
public final class ByteUtils extends Base64 {
    private ByteUtils() {
    }

    /***
     * 字节转换为16进制字符 BASE16
     * @param data 二进制数据
     * @param toLowerCase 大小写
     * @return HexString 16进制数据
     */
    public static String toHexString(byte[] data, boolean toLowerCase) {
        return String.valueOf(Hex.encodeHex(data, toLowerCase));
    }

    /***
     * 编码：字符转换为Base64字符
     * @param data 字符数据
     * @return HexString 16进制数据
     */
    public static String encodeBase64String(String data) {
        return encodeBase64String(data.getBytes(Charsets.UTF_8));
    }

    /***
     * 解码:字符转换为Base64字符
     * @param base64 字符
     * @return byte[] 进制数据
     */
    public static String decodeBase64ToString(String base64) {
        return toString(decodeBase64(base64));
    }

    /***
     * 解码:byte[]转换为Base64字符
     * @param base64 byte[]
     * @return byte[] 进制数据
     */
    public static String decodeBase64ToString(byte[] base64) {
        return toString(decodeBase64(base64));
    }

    /***
     * 字节转换为16进制字符
     * @param data 二进制数据
     * @return
     */
    public static String toString(byte[] data) {
        return new String(data, Charsets.UTF_8);
    }

    /***
     * 字节转换为16进制字符
     * @param data 二进制数据
     * @return
     */
    public static byte[] getBytes(String data) {
        if (data == null) {
            return null;
        }
        return data.getBytes(Charsets.UTF_8);
    }

    public static byte[] decodeBase64ToByte(String base64) {
        return decodeBase64(base64);
    }
}